import axios from 'axios'
import router from '@/router'
import store from '@/store/index.js'

import {
    ElMessage,
    ElMessageBox
} from 'element-plus'

// 引入二次封装的 ElLoading
import {
    showLoading,
    hideLoading
} from '@/utils/loading'

const server = axios.create({
    baseURL: "http://backend-api-01.newbee.ltd/api/v1/",
    // baseURL:'/api',
    timeout: 5000
})


// 前置拦截
server.interceptors.request.use(config => {
    // 开启 loading 效果
    showLoading()
    // 断网提示
    if (!navigator.onLine) {
        ElMessageBox.alert(
            '亲,好像出现了网络错误...',
            '温馨提示', {
            confirmButtonText: '好的',
            type: 'warning'
        }
        )
    }

    // 判断是否存在token,
    // 如果存在将每个页面的请求头 header 添加 token
    if (localStorage.getItem("token")) {
        // 新峰商城不需要带Bearer
        config.headers.token = localStorage.getItem("token")
    }

    return config

}, error => {
    return Promise.reject(error)
})


// 后置拦截
server.interceptors.response.use(res => {
    if (res.status == 200) {
        if (res.data.resultCode == 200) {
            if (res.data.message != "") {
                // ElMessage.success('响应' + res.data.message)
            }
        } else {
            // 提示错误
            ElMessage.error(res.data.message)
        }
    }
    //无效token
    if (res.data.resultCode == 416) {
        ElMessageBox.confirm('亲,检测到登录状态失效...', '温馨提示', {
            confirmButtonText: '立即登录',
            cancelButtonText: '取消',
            type: "warning"
        })
            .then(() => {
                router.push("/login")
                ElMessage({
                    type: 'success',
                    message: '已跳转'
                });
            })
            .catch(() => {
                ElMessage({
                    type: 'info',
                    message: '已取消'
                });
            })
    }
    // 响应拦截进来隐藏loading效果,此处采用延时处理是合并
    // loading 请求效果,避免多次请求loading关闭又开启
    setTimeout(() => {
        hideLoading()
    }, 200)
    return res
},
    error => {
        const {
            response
        } = error;
        // 反馈异常状态
        errorHandler(response.status, response.data);
        setTimeout(() => {
            hideLoading()
        }, 200)
        return Promise.reject(error)

    })

export default server;
